package br.com.esink.tests;

import br.com.eSink.dao.ConnectionDatabase;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Locale;

/*
 * CLASSE DE INSTALACAO DO eSink NO DESKTOP.
 * ADICIONA UMA CHAVE E A LINGUAGEM DO SISTEMA NO BANCO DE DADOS
 * 
 */
public class Installation {

    public static Installation install = new Installation();
    public static Connection con;
    public static Statement stmt;

    public static void main(String args[]) throws SQLException {

        //CONECTA AO BANCO DE DADOS
        ConnectionDatabase conDatabase = new ConnectionDatabase();
        con = conDatabase.openConnection("src/br/com/esink/resources/database/eSinkDatabase", "eSink", "");
        stmt = con.createStatement();

        if (!install.searchInfo(stmt, con)) {
            install.insertInfo();
        }
        conDatabase.closeConnection(con);
    }

    //METODO QUE VERIFICA SE JA HA INFORMACOES NO BANCO DE DADOS
    public boolean searchInfo(Statement stmt, Connection con) throws SQLException {
        try {
            ResultSet res;
            stmt = con.createStatement();
            res = stmt.executeQuery("select * from INFO_PC WHERE CHAVE_PC != ''");
            while (res.next()) {
                System.out.println("Informações encontradas!");
                return true;
            }
        } catch (Exception e) {
            System.out.println("Erro na pesquisa: " + e);
        }
        return false;
    }

    //METODO QUE INSERE A CHAVE E A LINGUAGEM NO BANCO DE DADOS
    public void insertInfo() {
        String key = generateKey();
        String language = searchLanguage();
        try {
            stmt = con.createStatement();
            stmt.executeUpdate("INSERT INTO INFO_PC (CHAVE_PC, LANGUAGE) VALUES ('" + key + "', '" + language + "')");
            System.out.println("Inserção concluída! Tabela: INFO_PC, Colunas: CHAVE_PC e LANGUAGE, Valores: " + key + " e " + language);
        } catch (Exception e) {
            System.out.println("Erro na inserção: " + e);
        }
    }

    //METODO QUE GERA A CHAVE
    public String generateKey() {
        int random = 0;
        StringBuffer key = new StringBuffer("");

        for (int i = 0; i < 20; i++) {

            while (true) {
                random = (int) (Math.random() * 122);

                if (random >= 48 && random <= 57) {
                    break;
                } else if (random >= 97 && random <= 122) {
                    break;
                } else if (random >= 65 && random <= 90) {
                    break;
                }
            }
            key.append((char) random);
        }
        System.out.println(key.toString());
        return key.toString();
    }

    public String searchLanguage() {
        Locale loc = Locale.getDefault();
        return loc.getLanguage();
    }
}
